package com.chinamsp.dydb.query;

/**
 * 表动态达式的 字段 类型
 * @author shifenghu
 *
 */
public enum FieldType {

	
	/**
	 * 字符串类型
	 */
	STRING("string", "字符串类型", SymbolType.EQ, SymbolType.LK, SymbolType.LLK, SymbolType.RLK, SymbolType.IN, SymbolType.NOT_IN, SymbolType.NQ),
	
	/**
	 * 日期类型，支持字符串(yyyy-MM-dd)、数字和date型，最终都转成 yyyy-MM-dd 字符串
	 */
	DATE("date", "日期类型，yyyy-MM-dd", SymbolType.EQ, SymbolType.GE, SymbolType.GT, SymbolType.LE, SymbolType.LT, SymbolType.NQ),
	
	/**
	 * 整数数据
	 */
	INT("int", "整数类型", SymbolType.EQ, SymbolType.GE, SymbolType.GT, SymbolType.LE, SymbolType.LT, SymbolType.NQ,SymbolType.IN, SymbolType.NOT_IN),
	
	/**
	 * 浮点型
	 */
	FLOAT("float", "浮点型", SymbolType.EQ, SymbolType.GE, SymbolType.GT, SymbolType.LE, SymbolType.LT, SymbolType.NQ,SymbolType.IN, SymbolType.NOT_IN),
	
	/**
	 * 时间类型，支持字符串(yyyy-MM-dd HH:mm:ss)、数字和date型，最终都转成 yyyy-MM-dd HH:mm:ss 字符串
	 */
	DATETIME("datetime", "时间类型，yyyy-MM-dd HH:mm:ss", SymbolType.EQ, SymbolType.GE, SymbolType.GT, SymbolType.LE, SymbolType.LT, SymbolType.NQ)
	;
	
	/**
	 * 类型
	 */
	private String type;
	
	/**
	 * 支持的表达式
	 */
	private SymbolType[] expressions;
	
	/**
	 * 描述
	 */
	private String desc;
	
	private FieldType(String type, String desc, SymbolType... expressions) {
		this.type = type;
		this.desc = desc;
		this.expressions = expressions;
	}

	public String getType() {
		return type;
	}

	public SymbolType[] getExpressions() {
		return expressions;
	}

	public String getDesc() {
		return desc;
	}
	
	/**
	 * 检查此字段类型是否支持特定条件
	 * @param type
	 * @return
	 */
	public boolean contains(SymbolType type) {
		for (SymbolType t : expressions) {
			if (t == type) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 根据类型查找 字段类型 枚举
	 * @param type
	 * @return
	 */
	public static FieldType byType(String type) {
		for (FieldType ft : FieldType.values()) {
			if (ft.type.equalsIgnoreCase(type)) {
				return ft;
			}
		}
		return null;
	}
}
